﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;

namespace System
{
    public static class BoolExtension
    {
        /// <summary>
        /// Если результат = false, то вызывается исключение, иначе возвращается результат
        /// </summary>
        /// <param name="b"></param>
        /// <param name="func"></param>
        /// <returns></returns>
        public static bool IfFalse(this bool b, Func<Exception> func)
        {
            if (!b)
                throw func();
            else
                return b;
        }

        /// <summary>
        /// Если результат = false, то выполняется анонимная процедура. Возвращается результат функции
        /// </summary>
        /// <param name="b"></param>
        /// <param name="proc"></param>
        /// <returns></returns>
        public static bool IfFalse(this bool b, Func<bool> func)
        {
            if (!b)
                return func();
            else
                return b;
        }

        /// <summary>
        /// Если результат = true, то выполняется анонимная процедура. Возвращается результат функции
        /// </summary>
        /// <param name="b"></param>
        /// <param name="proc"></param>
        /// <returns></returns>
        public static bool IfTrue(this bool b, Func<bool> func)
        {
            if (b)
                return func();
            else
                return b;
        }

        /// <summary>
        /// Если результат = false, то выполняется анонимная процедура. Возвращается входное значение
        /// </summary>
        /// <param name="b"></param>
        /// <param name="proc"></param>
        /// <returns></returns>
        public static bool IfFalse(this bool b, Action proc)
        {
            if (!b)
                proc();
            return b;
        }

        /// <summary>
        /// Если результат = true, то выполняется анонимная процедура. Возвращается входное значение
        /// </summary>
        /// <param name="b"></param>
        /// <param name="proc"></param>
        /// <returns></returns>
		public static bool IfTrue(this bool b, Action proc)
        {
            if (b)
                proc();
            return b;
        }
    }
}
